package com.sds.service.impl;

import com.sds.service.ThreadStopService;
import org.springframework.stereotype.Service;

@Service
public class ThreadStopServiceImpl implements ThreadStopService {

    @Override
    public void stopMethod() {
        // 创建一个新线程
        Thread t1 = new Thread(() -> {
            try {
                // 让线程睡眠5秒
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        });
        // 启动线程
        t1.start();
        try {
            // 让主线程睡眠0.5秒
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 停止线程
        t1.stop();
        // 打印线程状态
        System.out.println(t1.getState());
    }

    @Override
    public void sharedVariableMethod() {
        // 创建一个共享变量
        final boolean[] flag = {true};
        // 创建一个新线程
        Thread t1 = new Thread(() -> {
            while(flag[0]){
                // 处理任务
            }
            System.out.println("任务结束");
        });
        // 启动线程
        t1.start();
        try {
            // 让主线程睡眠0.5秒
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 修改共享变量
        flag[0] = false;
    }

    @Override
    public void interruptMethod() {
        // 线程默认情况下，    interrupt标记位：false
        System.out.println(Thread.currentThread().isInterrupted());
        // 执行interrupt之后，再次查看打断信息
        Thread.currentThread().interrupt();
        // interrupt标记位：ture
        System.out.println(Thread.currentThread().isInterrupted());
        // 返回当前线程，并归位为false interrupt标记位：ture
        System.out.println(Thread.interrupted());
        // 已经归位了
        System.out.println(Thread.interrupted());

        // =====================================================

        // 创建一个新线程
        Thread t1 = new Thread(() -> {
            while(!Thread.currentThread().isInterrupted()){
                // 处理业务
            }
            System.out.println("t1结束");
        });
        // 启动线程
        t1.start();
        try {
            // 让主线程睡眠0.5秒
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 中断线程
        t1.interrupt();
    }

    @Override
    public void interruptSleepMethod() {
        // 创建一个新线程
        Thread t1 = new Thread(() -> {
            while(true){
                try {
                    // 让线程睡眠1秒
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    System.out.println("基于打断形式结束当前线程");
                    return;
                }
            }
        });
        // 启动线程
        t1.start();
        try {
            // 让主线程睡眠0.5秒
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 中断线程
        t1.interrupt();
    }
}